<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
		<title></title>
		<link href="../../css/mui.css" rel="stylesheet" />
		<link rel="stylesheet" type="text/css" href="../../css/header.css" />
		<link href="../../css/mui.imageviewer.css" rel="stylesheet" />
		<style>
			html,
			body {
				height: 100%;
				margin: 0px;
				padding: 0px;
				overflow: hidden;
				-webkit-touch-callout: none;
				-webkit-user-select: none;
			}
			footer {
				position: fixed;
				width: 100%;
				height: 50px;
				min-height: 50px;
				border-top: solid 1px #bbb;
				left: 0px;
				bottom: 0px;
				overflow: hidden;
				padding: 0px 50px;
				background-color: #fafafa;
			}
			.footer-left {
				position: absolute;
				width: 50px;
				height: 50px;
				left: 0px;
				bottom: 0px;
				text-align: center;
				vertical-align: middle;
				line-height: 100%;
				padding: 12px 4px;
			}
			.footer-right {
				position: absolute;
				width: 50px;
				height: 50px;
				right: 0px;
				bottom: 0px;
				text-align: center;
				vertical-align: middle;
				line-height: 100%;
				padding: 12px 5px;
				display: inline-block;
			}
            .footer-right2 {
            	position: absolute;
            	width: 50px;
            	height: 50px;
            	right: 50px;
            	bottom: 0px;
            	text-align: center;
            	vertical-align: middle;
            	line-height: 100%;
            	padding: 12px 5px;
            	display: inline-block;
            }
			.footer-center {
				height: 100%;
				padding: 5px 0px;
			}
			.footer-center [class*=input] {
				width: 100%;
				height: 100%;
				border-radius: 5px;
			}
			.footer-center .input-text {
				background: #fff;
				border: solid 1px #ddd;
				padding: 10px !important;
				font-size: 16px !important;
				line-height: 18px !important;
				font-family: verdana !important;
				overflow: hidden;
			}
			.footer-center .input-sound {
				background-color: #eee;
			}
			.mui-content {
				height: 100%;
				padding: 44px 0px 50px 0px;
				overflow: auto;
				background-color: #eaeaea;
			}
			#msg-list {
				height: 100%;
				overflow: auto;
				-webkit-overflow-scrolling: touch;
			}
			.msg-item {
				padding: 8px;
				clear: both;
			}
			.msg-item .mui-item-clear {
				clear: both;
			}
			.msg-item .msg-user {
				width: 38px;
				height: 38px;
				border: solid 1px #d3d3d3;
				display: inline-block;
				background: #fff;
				border-radius: 3px;
				vertical-align: top;
				text-align: center;
				float: left;
				padding: 3px;
				color: #ddd;
			}
			
			.msg-item .msg-user-img{
				width: 38px;
				height: 38px;
				display: inline-block;
				border-radius: 3px;
				vertical-align: top;
				text-align: center;
				float: left;
				color: #ddd;
			}
			
			.msg-item .msg-content {
				display: inline-block;
				border-radius: 5px;
				border: solid 1px #d3d3d3;
				background-color: #FFFFFF;
				color: #333;
				padding: 8px;
				vertical-align: top;
				font-size: 15px;
				position: relative;
				margin: 0px 8px;
				max-width: 75%;
				min-width: 35px;
				float: left;
			}
			.msg-item .msg-content .msg-content-inner {
				overflow-x: hidden;
			}
			.msg-item .msg-content .msg-content-arrow {
				position: absolute;
				border: solid 1px #d3d3d3;
				border-right: none;
				border-top: none;
				background-color: #FFFFFF;
				width: 10px;
				height: 10px;
				left: -5px;
				top: 12px;
				-webkit-transform: rotateZ(45deg);
				transform: rotateZ(45deg);
			}
			.msg-item-self .msg-user,
			.msg-item-self .msg-content {
				float: right;
			}
			.msg-item-self .msg-content .msg-content-arrow {
				left: auto;
				right: -5px;
				-webkit-transform: rotateZ(225deg);
				transform: rotateZ(225deg);
			}
			.msg-item-self .msg-content,
			.msg-item-self .msg-content .msg-content-arrow {
				background-color: #4CD964;
				color: #fff;
				border-color: #2AC845;
			}
			footer .mui-icon {
				color: #000;
			}
			footer .mui-icon:active {
				color: #007AFF !important;
			}
			footer .mui-icon-paperplane:before {
				content: "发送";
			}
			footer .mui-icon-paperplane {
				/*-webkit-transform: rotateZ(45deg);
				transform: rotateZ(45deg);*/
				
				font-size: 16px;
				word-break: keep-all;
				line-height: 100%;
				padding-top: 6px;
				color: rgba(0, 135, 250, 1);
			}
			#msg-sound {
				-webkit-user-select: none !important;
				user-select: none !important;
			}
			.rprogress {
				position: absolute;
				left: 50%;
				top: 50%;
				width: 140px;
				height: 140px;
				margin-left: -70px;
				margin-top: -70px;
				background-image: url(../images/arecord.png);
				background-repeat: no-repeat;
				background-position: center center;
				background-size: 30px 30px;
				background-color: rgba(0, 0, 0, 0.7);
				border-radius: 5px;
				display: none;
				-webkit-transition: .15s;
			}
			.rschedule {
				background-color: rgba(0, 0, 0, 0);
				border: 5px solid rgba(0, 183, 229, 0.9);
				opacity: .9;
				border-left: 5px solid rgba(0, 0, 0, 0);
				border-right: 5px solid rgba(0, 0, 0, 0);
				border-radius: 50px;
				box-shadow: 0 0 15px #2187e7;
				width: 46px;
				height: 46px;
				position: absolute;
				left: 50%;
				top: 50%;
				margin-left: -23px;
				margin-top: -23px;
				-webkit-animation: spin 1s infinite linear;
				animation: spin 1s infinite linear;
			}
			.r-sigh{
				display: none;
				border-radius: 50px;
				box-shadow: 0 0 15px #2187e7;
				width: 46px;
				height: 46px;
				position: absolute;
				left: 50%;
				top: 50%;
				margin-left: -23px;
				margin-top: -23px;
				text-align: center;
				line-height: 46px;
				font-size: 40px;
				font-weight: bold;
				color: #2187e7;
			}
			.rprogress-sigh{
				background-image: none !important;
			}
			.rprogress-sigh .rschedule{
				display: none !important;
			}
			.rprogress-sigh .r-sigh{
				display: block !important;
			}
			.rsalert {
				font-size: 12px;
				color: #bbb;
				text-align: center;
				position: absolute;
				border-radius: 5px;
				width: 130px;
				margin: 5px 5px;
				padding: 5px;
				left: 0px;
				bottom: 0px;
			}
			@-webkit-keyframes spin {
				0% {
					-webkit-transform: rotate(0deg);
				}
				100% {
					-webkit-transform: rotate(360deg);
				}
			}
			@keyframes spin {
				0% {
					transform: rotate(0deg);
				}
				100% {
					transform: rotate(360deg);
				}
			}
			#h {
				background: #fff;
				border: solid 1px #ddd;
				padding: 10px !important;
				font-size: 16px !important;
				font-family: verdana !important;
				line-height: 18px !important;
				overflow: visible;
				position: absolute;
				left: -1000px;
				right: 0px;
				word-break: break-all;
				word-wrap: break-word;
			}
			.cancel {
				background-color: darkred;
			}
		</style>
	</head>

	<body contextmenu="return false;">
		<header class="mui-bar mui-bar-nav title">
			<a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left" style="color: #fff;"></a>
			<h1 class="mui-title title-color" id="chatting-nickname"></h1>
		</header>
		<pre id='h'></pre>
		<script id='msg-template' type="text/template">
			<% for(var i in record){ var item=record[i]; %>
				<div class="msg-item <%= (item.sender==2?' msg-item-self':'') %>" msg-type='<%=(item.type)%>' msg-content='<%=(item.content)%>'>
					<% if(item.sender==2 ) { %>
						<img class="msg-user-img" style="float: right;" src="<%=(myFace)%>" alt="" />
					<% } else { %>
						<img class="msg-user-img" src="<%=(friendFace)%>" alt="" />
					<% } %>
                    
					<div class="msg-content">
						<div class="msg-content-inner">
							<% if(item.type=='text' ) { %>
								<%=( item.content|| '&nbsp;&nbsp;') %>
							<% } else if(item.type=='image' ) { %>
								<img class="msg-content-image" src="<%=(item.content)%>" style="max-width: 100px;" />
							<% } else if(item.type=='audio' ) { %>
								<span class="play-state"><img src="../../images/audio.png"></span>
							<% } %>
						</div>
						<div class="msg-content-arrow"></div>
					</div>
					<div class="mui-item-clear"></div>
				</div>
			<% } %>
		</script>
		<div class="mui-content">
			<div id='msg-list'>
			</div>
		</div>
		<footer>
			<div class="footer-left">
				<i id='msg-image' class="mui-icon mui-icon-camera" style="font-size: 28px;"></i>
			</div>
			<div class="footer-center">
				<textarea id='msg-text' type="text" style="border: 0px;" class='input-text'></textarea>
				<button id='msg-sound' type="button" class='input-sound' style="display: none;">按住说话</button>
			</div>
			<label for="" class="footer-right">
				<i id='msg-type' class="mui-icon mui-icon-mic"></i>
			</label>
		</footer>
		<div id='sound-alert' class="rprogress">
			<div class="rschedule"></div>
			<div class="r-sigh">!</div>
			<div id="audio_tips" class="rsalert">手指上滑，取消发送</div>
		</div>
		<script src="../../js/mui.min.js"></script>
        <script src="../../js/app.js"></script>
		<script src="../../js/mui.imageViewer.js"></script>
		<script src="../../js/arttmpl.js"></script>
		<script type="text/javascript" charset="utf-8">
			var MIN_SOUND_TIME = 800;
			mui.init({
				gestureConfig: {
					tap: true, //默认为true
					doubletap: true, //默认为false
					longtap: true, //默认为false
					swipe: true, //默认为true
					drag: true, //默认为true
					hold: true, //默认为false，不监听
					release: true //默认为false，不监听
				}
			});
			template.config('escape', false);

            var myInfo;
            var friendInfo;
            var record;
			if(mui.os.ios){
				// 解决在ios上fixed元素focusin时位置出现错误的问题 
				document.addEventListener('DOMContentLoaded',function(){
					var footerDom = document.querySelector('footer');
					
					document.addEventListener('focusin', function() {
						footerDom.style.position = 'absolute';
					});
					document.addEventListener('focusout', function() {
						footerDom.style.position = 'fixed';
					});
				});
			}

            var ui = {
            	body: document.querySelector('body'),
            	footer: document.querySelector('footer'),
            	footerRight: document.querySelector('.footer-right'),
            	footerLeft: document.querySelector('.footer-left'),
            	btnMsgType: document.querySelector('#msg-type'),
            	boxMsgText: document.querySelector('#msg-text'),
            	boxMsgSound: document.querySelector('#msg-sound'),
            	btnMsgImage: document.querySelector('#msg-image'),
            	areaMsgList: document.querySelector('#msg-list'),
            	boxSoundAlert: document.querySelector('#sound-alert'),
            	h: document.querySelector('#h'),
            	content: document.querySelector('.mui-content')
            };
            ui.h.style.width = ui.boxMsgText.offsetWidth + 'px';
            var footerPadding = ui.footer.offsetHeight - ui.boxMsgText.offsetHeight;
            var imageViewer = new mui.ImageViewer('.msg-content-image', {
            	dbl: false
            });
			
			mui.plusReady(function() {
                var chatingWebview = plus.webview.currentWebview();
                // 设置软键盘样式
                // 设置为adjustResize在IOS系统会出现页面跳动
                // 设置为adjustPan会隐藏Header，为了用户体验，故在IOS使用adjustPan
                if (mui.os.ios) {
                    chatingWebview.setStyle({
                    	softinputMode: "adjustPan"
                    });
                } else {
                    chatingWebview.setStyle({
                    	softinputMode: "adjustResize"
                    });
                }
                // 获取我的消息
                myInfo = app.getUserGlobalInfo();
                // 获取好友的信息
                friendInfo = chatingWebview.friendInfo;
                // 设置聊天窗口标题
                document.getElementById("chatting-nickname").innerText = friendInfo.nickname;
                // 获取本地的聊天记录
                record = app.getChatRecord(myInfo.id, friendInfo.id);
                
				var showKeyboard = function() {
					if (mui.os.ios) {
						var webView = chatingWebview.nativeInstanceObject();
						webView.plusCallMethod({
							"setKeyboardDisplayRequiresUserAction": false
						});
					} else {
						var Context = plus.android.importClass("android.content.Context");
						var InputMethodManager = plus.android.importClass("android.view.inputmethod.InputMethodManager");
						var main = plus.android.runtimeMainActivity();
						var imm = main.getSystemService(Context.INPUT_METHOD_SERVICE);
						imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
						//var view = ((ViewGroup)main.findViewById(android.R.id.content)).getChildAt(0);
						imm.showSoftInput(main.getWindow().getDecorView(), InputMethodManager.SHOW_IMPLICIT);
						//alert("ll");
					}
				};
				
				bindMsgList();
				window.addEventListener('resize', function() {
					ui.areaMsgList.scrollTop = ui.areaMsgList.scrollHeight + ui.areaMsgList.offsetHeight;
				}, false);
                
				//解决长按“发送”按钮，导致键盘关闭的问题；
				ui.footerRight.addEventListener('touchstart', function(event) {
					if (ui.btnMsgType.classList.contains('mui-icon-paperplane')) {
						msgTextFocus();
						event.preventDefault();
					}
				});
				//解决长按“发送”按钮，导致键盘关闭的问题；
				ui.footerRight.addEventListener('touchmove', function(event) {
					if (ui.btnMsgType.classList.contains('mui-icon-paperplane')) {
						msgTextFocus();
						event.preventDefault();
					}
				});
				ui.footerRight.addEventListener('release', function(event) {
					if (ui.btnMsgType.classList.contains('mui-icon-paperplane')) {
						//showKeyboard();
						ui.boxMsgText.focus();
						setTimeout(function() {
							ui.boxMsgText.focus();
						}, 150);
						send({
							sender: app.SELF,
							type: 'text',
							content: ui.boxMsgText.value.replace(new RegExp('\n', 'gm'), '<br/>')
						});
						ui.boxMsgText.value = '';
						mui.trigger(ui.boxMsgText, 'input', null);
					} else if (ui.btnMsgType.classList.contains('mui-icon-mic')) {
						ui.btnMsgType.classList.add('mui-icon-compose');
						ui.btnMsgType.classList.remove('mui-icon-mic');
						ui.boxMsgText.style.display = 'none';
						ui.boxMsgSound.style.display = 'block';
						ui.boxMsgText.blur();
						document.body.focus();
					} else if (ui.btnMsgType.classList.contains('mui-icon-compose')) {
						ui.btnMsgType.classList.add('mui-icon-mic');
						ui.btnMsgType.classList.remove('mui-icon-compose');
						ui.boxMsgSound.style.display = 'none';
						ui.boxMsgText.style.display = 'block';
						//--
						//showKeyboard();
						ui.boxMsgText.focus();
						setTimeout(function() {
							ui.boxMsgText.focus();
						}, 150);
					}
				}, false);
				ui.footerLeft.addEventListener('tap', function(event) {
					var btnArray = [{
						title: "拍照"
					}, {
						title: "从相册选择"
					}];
					plus.nativeUI.actionSheet({
						title: "选择照片",
						cancel: "取消",
						buttons: btnArray
					}, function(e) {
						var index = e.index;
						switch (index) {
							case 0:
								break;
							case 1:
								var cmr = plus.camera.getCamera();
								cmr.captureImage(function(path) {
									send({
										sender: app.SELF,
										type: 'image',
										content: "file://" + plus.io.convertLocalFileSystemURL(path)
									});
								}, function(err) {});
								break;
							case 2:
								plus.gallery.pick(function(path) {
									send({
										sender: app.SELF,
										type: 'image',
										content: path
									});
								}, function(err) {}, null);
								break;
						}
					});
				}, false); 
				var recordCancel = false;
				var recorder = null;
				var audio_tips = document.getElementById("audio_tips");
				var startTimestamp = null;
				var stopTimestamp = null;
				var stopTimer = null;
				ui.boxMsgSound.addEventListener('hold', function(event) {
					recordCancel = false;
					if(stopTimer)clearTimeout(stopTimer);
					audio_tips.innerHTML = "手指上划，取消发送";
					ui.boxSoundAlert.classList.remove('rprogress-sigh');
					setSoundAlertVisable(true);
					recorder = plus.audio.getRecorder();
					if (recorder == null) {
						plus.nativeUI.toast("不能获取录音对象");
						return;
					}
					startTimestamp = (new Date()).getTime();
					recorder.record({
						filename: "_doc/audio/"
					}, function(path) {
						if (recordCancel) return;
						send({
							sender: app.SaudioELF,
							type: 'audio',
							content: path
						});
					}, function(e) {
						plus.nativeUI.toast("录音时出现异常: " + e.message);
					});
				}, false);
				ui.body.addEventListener('drag', function(event) {
					//console.log('drag');
					if (Math.abs(event.detail.deltaY) > 50) {
						if (!recordCancel) {
							recordCancel = true;
							if (!audio_tips.classList.contains("cancel")) {
								audio_tips.classList.add("cancel");
							}
							audio_tips.innerHTML = "松开手指，取消发送";
						}
					} else {
						if (recordCancel) {
							recordCancel = false;
							if (audio_tips.classList.contains("cancel")) {
								audio_tips.classList.remove("cancel");
							}
							audio_tips.innerHTML = "手指上划，取消发送";
						}
					}
				}, false);
				ui.boxMsgSound.addEventListener('release', function(event) {
					//console.log('release');
					if (audio_tips.classList.contains("cancel")) {
						audio_tips.classList.remove("cancel");
						audio_tips.innerHTML = "手指上划，取消发送";
					}
					//
					stopTimestamp = (new Date()).getTime();
					if (stopTimestamp - startTimestamp < MIN_SOUND_TIME) {
						audio_tips.innerHTML = "录音时间太短";
						ui.boxSoundAlert.classList.add('rprogress-sigh');
						recordCancel = true;
						stopTimer=setTimeout(function(){
							setSoundAlertVisable(false);
						},800);
					}else{
						setSoundAlertVisable(false);
					}
					recorder.stop();
				}, false);
				ui.boxMsgSound.addEventListener("touchstart", function(e) {
					//console.log("start....");
					e.preventDefault();
				});
				ui.boxMsgText.addEventListener('input', function(event) {
					ui.btnMsgType.classList[ui.boxMsgText.value == '' ? 'remove' : 'add']('mui-icon-paperplane');
					ui.btnMsgType.setAttribute("for", ui.boxMsgText.value == '' ? '' : 'msg-text');
					ui.h.innerText = ui.boxMsgText.value.replace(new RegExp('\n', 'gm'), '\n-') || '-';
					ui.footer.style.height = (ui.h.offsetHeight + footerPadding) + 'px';
					ui.content.style.paddingBottom = ui.footer.style.height;
				});
				var focus = false;
				ui.boxMsgText.addEventListener('tap', function(event) {
					ui.boxMsgText.focus();
					setTimeout(function() {
						ui.boxMsgText.focus();
					}, 0);
					focus = true;
					setTimeout(function () {
						focus = false;
					},1000);
					event.detail.gesture.preventDefault();
				}, false);
				//点击消息列表，关闭键盘
				ui.areaMsgList.addEventListener('touchmove',function (event) {
					if(!focus){
						ui.boxMsgText.blur();
					}
				})
				
			});
            
            function msgItemTap(msgItem, event) {
            	var msgType = msgItem.getAttribute('msg-type');
            	var msgContent = msgItem.getAttribute('msg-content')
            	if (msgType == 'audio') {
            		player = plus.audio.createPlayer(msgContent);
            		var playState = msgItem.querySelector('.play-state');
            		playState.innerText = '正在播放...';
            		player.play(function() {
            			playState.innerHTML = '<img src="../../images/audio.png">';
            		}, function(e) {
            			playState.innerHTML = '<img src="../../images/audio.png">';
            		});
            	}
            };
            
            // 将消息渲染到消息列表中
            function bindMsgList() {
                // 用模板来渲染HTML
            	ui.areaMsgList.innerHTML = template('msg-template', {
            		"record": record, // 聊天记录数组
                    "myFace": myInfo.faceImage === "" ? app.defaultFace:myInfo.faceImage, // 我的头像
                    "friendFace": friendInfo.faceImage === "" ? app.defaultFace : friendInfo.faceImage // 好友的头像
            	});
            	var msgItems = ui.areaMsgList.querySelectorAll('.msg-item');
            	[].forEach.call(msgItems, function(item, index) {
            		item.addEventListener('tap', function(event) {
            			msgItemTap(item, event);
            		}, false);
            	});
            	imageViewer.findAllImage();
            	ui.areaMsgList.scrollTop = ui.areaMsgList.scrollHeight + ui.areaMsgList.offsetHeight;
            };
            
            // 播放发送消息的铃声
            function playSendMsgSound() {
                var player = plus.audio.createPlayer("../../mp3/send.mp3");
                player.play();
            }
            // 播放接收消息的铃声
            function playReceiveMsgSound() {
                var player = plus.audio.createPlayer("../../mp3/di_didi.mp3");
                player.play();
            }
            
            // 定义一个发送消息函数
            function send(info) {
                // 发送之前先判断网络的状态
                var connectionStatus = plus.networkinfo.getCurrentType();
                if (connectionStatus === 0 || connectionStatus === 1) {
                    app.showToast("当前无网络连接", "error");
                    return;
                }
                // 构建一个聊天的ChatMsg
                var chatMsgBo = new app.ChatMsgBo(myInfo.id, friendInfo.id, null, info.type, info.content);
                // 构建MsgContent
                var msgContent = new app.MsgContent(app.CHAT, chatMsgBo, null);
                var wsWebview = plus.webview.getWebviewById("chat-list");
                // 调用wsWebview中的方法来发送消息
                wsWebview.evalJS("Chat.chat('" + JSON.stringify(msgContent) + "')");
            };
            
            function refreshMsgList(infoStr){
                // 把接收到的JSON字符串序列化为JS对象
                var info = JSON.parse(infoStr);
                // 播放发送消息提示音
                playSendMsgSound();
                // 把我发送的消息加到本地聊天记录中
                record.push(info);
                // 刷新聊天列表
                bindMsgList();
            }
            
            // 定义一个接受消息的函数
            function receive(finfo) {
                // 把接收到的JSON字符串序列化为JS对象
                var info = JSON.parse(finfo);
                playReceiveMsgSound();
                // 把接收到的消息加到本地聊天记录中
                record.push(info);
                // 刷新聊天列表
                bindMsgList();
            }
            
            function msgTextFocus() {
                ui.boxMsgText.focus();
                setTimeout(function() {
                    ui.boxMsgText.focus();
                }, 150);
            }
            
            function setSoundAlertVisable(show){
            	if(show){
            		ui.boxSoundAlert.style.display = 'block';
            		ui.boxSoundAlert.style.opacity = 1;
            	}else{
            		ui.boxSoundAlert.style.opacity = 0;
            		//fadeOut 完成再真正隐藏
            		setTimeout(function(){
            			ui.boxSoundAlert.style.display = 'none';
            		},200);
            	}
            };
		</script>
	</body>

</html>